<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        /*
            总结：
                a. Class 定义的类型，本质上还是一个函数，但是只能用于创建实例
                b. Class 定义的类型，只能由 new 关键字调用
                c. Class 定义的类型，内部直接声明 this 会有问题, 会报错
                         只能在 构造器 中或者 方法中使用 this

        */

        // 1. 使用class声明类型
        class Student {
            // 1.1 内部属性，不能使用this声明
            version = 'v1.0.2';
            _ouzhou;

            // 1.2 静态属性 - 给函数实例本身的，不是给类型实例访问的
            static guigu = 'ok!';

            // 1.3 内部方法 - 会挂载到实例身上
            sayHello = function () {
                console.log(this.version);
            }

            // 1.4 建议使用简写
            func() {
                console.log(this.version);
            }

            // 1.5 构造器 - 可以创建实例的动态属性
            constructor(age) {
                this.uage = age;
            }

            // 1.6 定义 Getter 和 Setter 
            get ouzhou() {
                return this._ouzhou;
            }

            set ouzhou(val) {
                this._ouzhou = val;
            }
        }

        // console.log(typeof Student); // function
        var s1 = new Student(40);
        console.log(s1);

    </script>
</body>

</html>